package br.com.sgc.entities.financeiro;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.sgc.entities.geral.Clinica;
import br.com.sgc.enuns.TipoDesconto;

@Entity
@Table(schema="financeiro")
@Inheritance(strategy = InheritanceType.JOINED)
public class Conta implements Serializable{

	private static final long serialVersionUID = -7164149632064022586L;
	
	@Id 
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ")
	@SequenceGenerator(schema = "financeiro", initialValue = 1, name = "SEQ", sequenceName = "financeiro.seq_conta", allocationSize = 1)
	private Long id;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "forma_pagamento_id")
	private FormaPagamento formaPagamento = new FormaPagamento();
	
	@Column(name = "valor_principal")
	private BigDecimal valorPrincipal;
	
	private BigDecimal juros;
	
	private BigDecimal multa;
	
	private BigDecimal desconto;
	
	@Column(name = "valor_total")
	private BigDecimal valorTotal;
	
	@Column(name = "valor_pagamento")
	private BigDecimal valorPagamento;
	
	@Column(name = "tipo_desconto")
	private TipoDesconto tipoDesconto;

	@Temporal(TemporalType.DATE)
	@Column(name = "data_prevista_pagamento")
	private Date dataPrevisaoPagamento;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "data_real_pagamento")
	private Date dataRealPagamento;
	
	@Column(name = "numero_parcela")
	private String numeroParcela;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "clinica_id")
	private Clinica clinica;
	
	private Boolean quitado;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public FormaPagamento getFormaPagamento() {
		return formaPagamento;
	}

	public void setFormaPagamento(FormaPagamento formaPagamento) {
		this.formaPagamento = formaPagamento;
	}

	public BigDecimal getValorPrincipal() {
		return valorPrincipal;
	}

	public void setValorPrincipal(BigDecimal valorPrincipal) {
		this.valorPrincipal = valorPrincipal;
	}

	public BigDecimal getJuros() {
		return juros;
	}

	public void setJuros(BigDecimal juros) {
		this.juros = juros;
	}

	public BigDecimal getMulta() {
		return multa;
	}

	public void setMulta(BigDecimal multa) {
		this.multa = multa;
	}

	public BigDecimal getDesconto() {
		return desconto;
	}

	public void setDesconto(BigDecimal desconto) {
		this.desconto = desconto;
	}

	public BigDecimal getValorTotal() {
		return valorTotal;
	}

	public void setValorTotal(BigDecimal valorTotal) {
		this.valorTotal = valorTotal;
	}

	public BigDecimal getValorPagamento() {
		return valorPagamento;
	}

	public void setValorPagamento(BigDecimal valorPagamento) {
		this.valorPagamento = valorPagamento;
	}

	public TipoDesconto getTipoDesconto() {
		return tipoDesconto;
	}

	public void setTipoDesconto(TipoDesconto tipoDesconto) {
		this.tipoDesconto = tipoDesconto;
	}

	public Date getDataPrevisaoPagamento() {
		return dataPrevisaoPagamento;
	}

	public void setDataPrevisaoPagamento(Date dataPrevisaoPagamento) {
		this.dataPrevisaoPagamento = dataPrevisaoPagamento;
	}

	public Date getDataRealPagamento() {
		return dataRealPagamento;
	}

	public void setDataRealPagamento(Date dataRealPagamento) {
		this.dataRealPagamento = dataRealPagamento;
	}

	public String getNumeroParcela() {
		return numeroParcela;
	}

	public void setNumeroParcela(String numeroParcela) {
		this.numeroParcela = numeroParcela;
	}

	public Clinica getClinica() {
		return clinica;
	}

	public void setClinica(Clinica clinica) {
		this.clinica = clinica;
	}

	public Boolean getQuitado() {
		return quitado;
	}

	public void setQuitado(Boolean quitado) {
		this.quitado = quitado;
	}
}
